﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Interfaces.Servicos;
using LM.InterfacesFabricas.Utilidades;
using LM.Negocio.Objetos;
using LM.Negocio.Validadores;
using LM.Repositorios;
using LM.Repositorios.Interfaces;

namespace LM.Servicos
{
    public class ServicoDeTelefone : IServicoDeTelefone
    {
        public void Cadastre(DtoTelefone Telefone)
        {
            var repositorioDeTelefone = FabricaDeRepositorios.Crie<IRepositorioDeTelefone>();
            var validadorDeTelefone = new ValidadorDeTelefone(repositorioDeTelefone);
            var TelefoneObjeto = ConversorDeObjetos.Copie<Telefone>(Telefone);

            validadorDeTelefone.ValideCadastro(TelefoneObjeto);

            repositorioDeTelefone.Cadastre(TelefoneObjeto);
        }

        public void Atualize(DtoTelefone Telefone)
        {
            var repositorioDeTelefone = FabricaDeRepositorios.Crie<IRepositorioDeTelefone>();
            var validadorDeTelefone = new ValidadorDeTelefone(repositorioDeTelefone);
            var TelefoneObjeto = ConversorDeObjetos.Copie<Telefone>(Telefone);

            validadorDeTelefone.ValideAtualizacao(TelefoneObjeto);

            repositorioDeTelefone.Atualize(TelefoneObjeto);
        }

        public void Exclua(int codigo)
        {
            var repositorioDeTelefone = FabricaDeRepositorios.Crie<IRepositorioDeTelefone>();
            var validadorDeTelefone = new ValidadorDeTelefone(repositorioDeTelefone);
            var TelefoneObjeto = ConversorDeObjetos.Copie<Telefone>(repositorioDeTelefone.Consulte(codigo));

            validadorDeTelefone.ValideExclusao(TelefoneObjeto);

            repositorioDeTelefone.Exclua(TelefoneObjeto);
        }

        public DtoTelefone Consulte(int codigo)
        {
            var TelefoneObjeto = FabricaDeRepositorios.Crie<IRepositorioDeTelefone>().Consulte(codigo);

            return ConversorDeObjetos.Copie<DtoTelefone>(TelefoneObjeto);
        }

        public IList<DtoTelefone> ConsulteTodos()
        {
            return ConversorDeObjetos.Copie<DtoTelefone, Telefone>(FabricaDeRepositorios.Crie<IRepositorioDeTelefone>().ConsulteTodos());
        }
    }
}
